Followup to SoupServer port deprecation
authorColin Walters <walters@verbum.org>
Thu, 25 Sep 2014 19:57:58 +0000 (15:57 -0400)
committerColin Walters <walters@verbum.org>
Thu, 25 Sep 2014 19:57:58 +0000 (15:57 -0400)
My patch didn't actually work with newer libsoup.

src/ostree/ot-builtin-trivial-httpd.c

index 727ff30fdb60cf150574cc076041b38ec9efa834..83318c95ea38dacef4511642a9f49d5600d88be5 100644 (file)
@@ -347,7 +347,8 @@ ostree_builtin_trivial_httpd (int argc, char **argv, OstreeRepo *repo, GCancella
 
 #if SOUP_CHECK_VERSION(2, 48, 0)
   server = soup_server_new (SOUP_SERVER_SERVER_HEADER, "ostree-httpd ", NULL);
-  soup_server_listen (server, NULL, 0);
+  if (!soup_server_listen_local (server, 0, 0, error))
+    goto out;
 #else
   server = soup_server_new (SOUP_SERVER_PORT, 0,
                             SOUP_SERVER_SERVER_HEADER, "ostree-httpd ",
@@ -357,7 +358,26 @@ ostree_builtin_trivial_httpd (int argc, char **argv, OstreeRepo *repo, GCancella
   soup_server_add_handler (server, NULL, httpd_callback, app, NULL);
   if (opt_port_file)
     {
-      gs_free char *portstr = g_strdup_printf ("%u\n", soup_server_get_port (server));
+      gs_free char *portstr = NULL;
+#if SOUP_CHECK_VERSION(2, 48, 0)
+      GSList *listeners = soup_server_get_listeners (server);
+      gs_unref_object GSocket *listener = NULL;
+      gs_unref_object GSocketAddress *addr = NULL;
+      
+      g_assert (listeners);
+      listener = g_object_ref (listeners->data);
+      g_slist_free (listeners);
+      listeners = NULL;
+      addr = g_socket_get_local_address (listener, error);
+      if (!addr)
+        goto out;
+      g_assert (G_IS_INET_ADDRESS (addr));
+      
+      g_strdup_printf ("%u\n", g_inet_socket_address_get_port ((GInetSocketAddress*)addr));
+#else
+      g_strdup_printf ("%u\n", soup_server_get_port (server));
+#endif
+
       if (g_strcmp0 ("-", opt_port_file) == 0)
         {
           fputs (portstr, stdout); // not g_print - this must go to stdout, not a handler
@@ -366,7 +386,9 @@ ostree_builtin_trivial_httpd (int argc, char **argv, OstreeRepo *repo, GCancella
       else if (!g_file_set_contents (opt_port_file, portstr, strlen (portstr), error))
         goto out;
     }
+#if !SOUP_CHECK_VERSION(2, 48, 0)
   soup_server_run_async (server);
+#endif
 
   if (opt_daemonize)
     {